A.1 智能合约开发框架与CLI
Hardhat(推荐新手与全栈开发者)
Hardhat 是目前以太坊生态系统中最广泛使用的智能合约开发框架,以其JavaScript/TypeScript生态的灵活性和丰富的插件著称。
| 命令 | 功能 |
|---|---|
npx hardhat | 交互式初始化新项目 |
npx hardhat compile | 编译 contracts/ 目录下所有Solidity文件 |
npx hardhat test | 运行 test/ 目录下所有测试脚本 |
npx hardhat node | 启动本地Hardhat Network(类似Ganache,随调随用) |
npx hardhat run scripts/deploy.js --network <network> | 在指定网络上运行部署脚本 |
npx hardhat verify --network <net> <addr> <constructorArgs...> | 验证已部署合约的源码 |
Foundry(推荐高级与安全审计方向)
Foundry 是一套基于Rust构建的原生工具链,测试直接以Solidity编写,执行速度极快,是安全审计人员的首选。
| 命令 | 功能 |
|---|---|
forge init <project> | 初始化新项目 |
forge build | 编译合约 |
forge test | 运行Solidity测试(支持fuzzing,Gas报告自动生成) |
cast send <tx> | 链上发送交易或调用合约函数 |
anvil | 启动本地EVM节点(等效于Hardhat Network) |
选型建议:
- 如果你是全栈DApp开发者,或团队使用JavaScript/TypeScript前后端统一,选择 Hardhat。
- 如果你专注于安全审计、需要快速运行大量模糊测试(Fuzzing),或偏好Solidity原生测试,选择 Foundry。
A.2 核心合约库与依赖
OpenZeppelin Contracts
OpenZeppelin 的合约库是行业安全标准,基本所有生产级的ERC-20/ERC-721合约都基于它构建。
bash
npm install @openzeppelin/contracts| 合约路径 | 用途 |
|---|---|
@openzeppelin/contracts/token/ERC20/ERC20.sol | 标准ERC-20代币实现 |
@openzeppelin/contracts/token/ERC721/ERC721.sol | 标准NFT实现 |
@openzeppelin/contracts/token/ERC721/ERC721A.sol | Azuki优化的ERC-721(批量铸造省Gas) |
@openzeppelin/contracts/security/ReentrancyGuard.sol | 重入攻击防护 |
@openzeppelin/contracts/access/Ownable.sol | 所有权管理 |
始终从官方源安装,并定期升级到最新版本以获取安全补丁。
A.3 前端与合约交互库
ethers.js v6(当前推荐标准)
在19.5节我们已经使用了v6的核心API。以下是速查:
| API | 用途 |
|---|---|
new ethers.BrowserProvider(window.ethereum) | 连接MetaMask钱包 |
await provider.getSigner() | 获取当前账户的签名器 |
new ethers.Contract(address, abi, signer) | 构造合约交互实例 |
ethers.parseUnits("1.5", 18) | 字符串/数字 → wei(BigInt) |
ethers.formatUnits(weiValue, 18) | wei(BigInt) → 可读字符串 |
await tx.wait() | 等待交易被链上确认 |
viem(新兴替代,类型安全优先)
bash
npm install viemviem 是Wagmi团队推出的轻量库,具备完整的TypeScript类型推导,体积比web3.js小一个数量级,适合新项目。
web3.js(Legacy兼容场景)
bash
npm install web3web3.js v4.x 已全面支持ESM和TypeScript,但在新项目中的市场份额正逐渐被 ethers.js 和 viem 取代。仅在维护老项目时使用。
选型建议:新项目优先 ethers.js v6,强TypeScript项目可尝试 viem。
A.4 测试、调试与模拟工具
Hardhat Network 高级操作
javascript
// 操纵区块时间(模拟时间流逝)
await network.provider.send("evm_increaseTime", [3600]);
await network.provider.send("evm_mine"); // 挖一个新块
// 快照与回滚(测试隔离)
const snapshotId = await network.provider.send("evm_snapshot");
// ... 执行可能改变状态的测试 ...
await network.provider.send("evm_revert", [snapshotId]);Anvil(Foundry配套本地节点)
bash
anvil --fork-url https://eth-mainnet.g.alchemy.com/v2/YOUR_KEYForking 主网的能力使你可以在本地环境中模拟真实链状态,是调试复杂DeFi协议的利器。
Tenderly
在线调试平台(https://tenderly.co),支持:
- 交易模拟(Simulation):在实际执行前预测交易结果。
- Gas分析:逐条指令的Gas消耗细分。
- 调试器:逐步跟踪EVM执行栈。
推荐Hardhat插件
| 插件 | 功能 |
|---|---|
hardhat-verify | 自动Etherscan源码验证 |
hardhat-gas-reporter | 测试后生成Gas消耗表格 |
hardhat-ethers | ethers.js v5/v6 集成 |
A.5 区块链浏览器与API服务商
区块浏览器
| 名称 | 主网 | 测试网 | 特色 |
|---|---|---|---|
| Etherscan | etherscan.io | sepolia.etherscan.io | 最权威,验证首选 |
| BscScan | bscscan.com | testnet.bscscan.com | BNB Smart Chain |
| PolygonScan | polygonscan.com | amoy.polygonscan.com | Polygon PoS |
| Arbiscan | arbiscan.io | sepolia.arbiscan.io | Arbitrum L2 |
| Optimistic Etherscan | optimistic.etherscan.io | sepolia-optimism.etherscan.io | Optimism L2 |
RPC节点服务商
| 服务商 | 免费额度 | 特点 |
|---|---|---|
| Alchemy | 开发级免费 | 稳定、仪表盘完善 |
| Infura | 开发级免费 | 老牌服务商,IPFS集成 |
| QuickNode | 有限免费 | 全球多区域节点 |
生产环境务必使用付费RPC套餐或自建节点。免费额度在DApp流量突增时极易被限流。
评论
0评论加载中…